博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bootstrap+fileinput插件实现可预览上传照片功能
阅读量:5078 次
发布时间:2019-06-12

本文共 9576 字,大约阅读时间需要 31 分钟。

图片.png

实际项目中运用:

图片.png

功能:实现上传图片,更改上传图片,移除图片的功能

            
选择图片 更改
移除
请选择1M以内图片

bootstrap-fileinput.css文件:(github目前正在维护中,之后所有代码上传至我的github)

/*! * Jasny Bootstrap v3.1.3 (http://jasny.github.io/bootstrap) * Copyright 2012-2014 Arnold Daniels * Licensed under Apache-2.0 (https://github.com/jasny/bootstrap/blob/master/LICENSE) */ .btn-file {  position: relative;  overflow: hidden;  vertical-align: middle;}.btn-file > input {  position: absolute;  top: 0;  right: 0;  width: 100%;  height: 100%;  margin: 0;  font-size: 23px;  cursor: pointer;  filter: alpha(opacity=0);  opacity: 0;  direction: ltr;}.fileinput {  display: inline-block;  margin-bottom: 9px;}.fileinput .form-control {  display: inline-block;  padding-top: 7px;  padding-bottom: 5px;  margin-bottom: 0;  vertical-align: middle;  cursor: text;}.fileinput .thumbnail {  display: inline-block;  margin-bottom: 5px;  overflow: hidden;  text-align: center;  vertical-align: middle;}.fileinput .thumbnail > img {  max-height: 100%;}.fileinput .btn {  vertical-align: middle;}.fileinput-exists .fileinput-new,.fileinput-new .fileinput-exists {  display: none;}.fileinput-inline .fileinput-controls {  display: inline;}.fileinput-filename {  display: inline-block;  overflow: hidden;  vertical-align: middle;}.form-control .fileinput-filename {  vertical-align: bottom;}.fileinput.input-group {  display: table;}.fileinput.input-group > * {  position: relative;  z-index: 2;}.fileinput.input-group > .btn-file {  z-index: 1;}.fileinput-new.input-group .btn-file,.fileinput-new .input-group .btn-file {  border-radius: 0 4px 4px 0;}.fileinput-new.input-group .btn-file.btn-xs,.fileinput-new .input-group .btn-file.btn-xs,.fileinput-new.input-group .btn-file.btn-sm,.fileinput-new .input-group .btn-file.btn-sm {  border-radius: 0 3px 3px 0;}.fileinput-new.input-group .btn-file.btn-lg,.fileinput-new .input-group .btn-file.btn-lg {  border-radius: 0 6px 6px 0;}.form-group.has-warning .fileinput .fileinput-preview {  color: #8a6d3b;}.form-group.has-warning .fileinput .thumbnail {  border-color: #faebcc;}.form-group.has-error .fileinput .fileinput-preview {  color: #a94442;}.form-group.has-error .fileinput .thumbnail {  border-color: #ebccd1;}.form-group.has-success .fileinput .fileinput-preview {  color: #3c763d;}.form-group.has-success .fileinput .thumbnail {  border-color: #d6e9c6;}.input-group-addon:not(:first-child) {  border-left: 0;}

bootstrap-fileinput.js:

/* =========================================================== * Bootstrap: fileinput.js v3.1.3 * http://jasny.github.com/bootstrap/javascript/#fileinput * =========================================================== * Copyright 2012-2014 Arnold Daniels * * Licensed under the Apache License, Version 2.0 (the "License") * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * ========================================================== */+function ($) { "use strict";  var isIE = window.navigator.appName == 'Microsoft Internet Explorer'  // FILEUPLOAD PUBLIC CLASS DEFINITION  // =================================  var Fileinput = function (element, options) {    this.$element = $(element)        this.$input = this.$element.find(':file')    if (this.$input.length === 0) return    this.name = this.$input.attr('name') || options.name    this.$hidden = this.$element.find('input[type=hidden][name="' + this.name + '"]')    if (this.$hidden.length === 0) {      this.$hidden = $('').insertBefore(this.$input)    }    this.$preview = this.$element.find('.fileinput-preview')    var height = this.$preview.css('height')    if (this.$preview.css('display') !== 'inline' && height !== '0px' && height !== 'none') {      this.$preview.css('line-height', height)    }            this.original = {      exists: this.$element.hasClass('fileinput-exists'),      preview: this.$preview.html(),      hiddenVal: this.$hidden.val()    }        this.listen()  }    Fileinput.prototype.listen = function() {    this.$input.on('change.bs.fileinput', $.proxy(this.change, this))    $(this.$input[0].form).on('reset.bs.fileinput', $.proxy(this.reset, this))        this.$element.find('[data-trigger="fileinput"]').on('click.bs.fileinput', $.proxy(this.trigger, this))    this.$element.find('[data-dismiss="fileinput"]').on('click.bs.fileinput', $.proxy(this.clear, this))  },  Fileinput.prototype.change = function(e) {    var files = e.target.files === undefined ? (e.target && e.target.value ? [{ name: e.target.value.replace(/^.+\\/, '')}] : []) : e.target.files        e.stopPropagation()    if (files.length === 0) {      this.clear()      return    }    this.$hidden.val('')    this.$hidden.attr('name', '')    this.$input.attr('name', this.name)    var file = files[0]    if (this.$preview.length > 0 && (typeof file.type !== "undefined" ? file.type.match(/^image\/(gif|png|jpeg)$/) : file.name.match(/\.(gif|png|jpe?g)$/i)) && typeof FileReader !== "undefined") {      var reader = new FileReader()      var preview = this.$preview      var element = this.$element      reader.onload = function(re) {        var $img = $('')        $img[0].src = re.target.result        files[0].result = re.target.result                element.find('.fileinput-filename').text(file.name)                // if parent has max-height, using `(max-)height: 100%` on child doesn't take padding and border into account        if (preview.css('max-height') != 'none') $img.css('max-height', parseInt(preview.css('max-height'), 10) - parseInt(preview.css('padding-top'), 10) - parseInt(preview.css('padding-bottom'), 10)  - parseInt(preview.css('border-top'), 10) - parseInt(preview.css('border-bottom'), 10))                preview.html($img)        element.addClass('fileinput-exists').removeClass('fileinput-new')        element.trigger('change.bs.fileinput', files)      }      reader.readAsDataURL(file)    } else {      this.$element.find('.fileinput-filename').text(file.name)      this.$preview.text(file.name)            this.$element.addClass('fileinput-exists').removeClass('fileinput-new')            this.$element.trigger('change.bs.fileinput')    }  },  Fileinput.prototype.clear = function(e) {    if (e) e.preventDefault()        this.$hidden.val('')    this.$hidden.attr('name', this.name)    this.$input.attr('name', '')    //ie8+ doesn't support changing the value of input with type=file so clone instead    if (isIE) {       var inputClone = this.$input.clone(true);      this.$input.after(inputClone);      this.$input.remove();      this.$input = inputClone;    } else {      this.$input.val('')    }    this.$preview.html('')    this.$element.find('.fileinput-filename').text('')    this.$element.addClass('fileinput-new').removeClass('fileinput-exists')        if (e !== undefined) {      this.$input.trigger('change')      this.$element.trigger('clear.bs.fileinput')    }  },  Fileinput.prototype.reset = function() {    this.clear()    this.$hidden.val(this.original.hiddenVal)    this.$preview.html(this.original.preview)    this.$element.find('.fileinput-filename').text('')    if (this.original.exists) this.$element.addClass('fileinput-exists').removeClass('fileinput-new')     else this.$element.addClass('fileinput-new').removeClass('fileinput-exists')        this.$element.trigger('reset.bs.fileinput')  },  Fileinput.prototype.trigger = function(e) {    this.$input.trigger('click')    e.preventDefault()  }    // FILEUPLOAD PLUGIN DEFINITION  // ===========================  var old = $.fn.fileinput    $.fn.fileinput = function (options) {    return this.each(function () {      var $this = $(this),          data = $this.data('bs.fileinput')      if (!data) $this.data('bs.fileinput', (data = new Fileinput(this, options)))      if (typeof options == 'string') data[options]()    })  }  $.fn.fileinput.Constructor = Fileinput  // FILEINPUT NO CONFLICT  // ====================  $.fn.fileinput.noConflict = function () {    $.fn.fileinput = old    return this  }  // FILEUPLOAD DATA-API  // ==================  $(document).on('click.fileinput.data-api', '[data-provides="fileinput"]', function (e) {    var $this = $(this)    if ($this.data('bs.fileinput')) return    $this.fileinput($this.data())          var $target = $(e.target).closest('[data-dismiss="fileinput"],[data-trigger="fileinput"]');    if ($target.length > 0) {      e.preventDefault()      $target.trigger('click.bs.fileinput')    }  })}(window.jQuery);

文末福利:

福利一:前端,Java,产品经理,微信小程序,Python等资源合集大放送:

福利二:微信小程序入门与实战全套详细视频教程

image

领取方式:

如果需要学习视频,欢迎关注 【编程微刊】微信公众号,回复【领取资源】一键领取以下所有干货资源,获取更多有用技术干货、文档资料。所有文档会持续更新,欢迎关注一起成长!

原文作者:祈澈姑娘

原文链接:
创作不易,转载请告知

90后前端妹子,爱编程,爱运营,爱折腾。

坚持总结工作中遇到的技术问题,坚持记录工作中所所思所见,欢迎大家一起探讨交流。

转载于:https://www.cnblogs.com/ting6/p/9725706.html

你可能感兴趣的文章
Linear Algebra lecture 2 note
查看>>
CRC计算模型
查看>>
Ajax之404,200等查询
查看>>
Aizu - 1378 Secret of Chocolate Poles (DP)
查看>>
csv HTTP简单表服务器
查看>>
OO设计的接口分隔原则
查看>>
数据库连接字符串大全 (转载)
查看>>
java类加载和对象初始化
查看>>
对于负载均衡的理解
查看>>
django简介
查看>>
window.event在IE和Firefox的异同
查看>>
常见的js算法面试题收集,es6实现
查看>>
IO流写出到本地 D盘demoIO.txt 文本中
查看>>
Windows10 下Apache服务器搭建
查看>>
HDU 5458 Stability
查看>>
左手坐标系和右手坐标系
查看>>
solr后台操作Documents之增删改查
查看>>
http://yusi123.com/
查看>>
文件文本的操作
查看>>
Ubuntu linux下gcc版本切换
查看>>